<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Cache-Control" content="no-siteapp">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=1, minimum-scale=1, maximum-scale=1">
<meta name="renderer" content="webkit">
<meta name="google" value="notranslate">
<meta name="robots" content="index,follow">


<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Akkuman">
<meta name="twitter:description" content="Akkuman的技术博客">
<meta name="twitter:image:src" content="http://127.0.0.1:8000/images/avatar.png">

<meta property="og:url" content="http://127.0.0.1:8000">
<meta property="og:title" content="Akkuman">
<meta property="og:description" content="Akkuman的技术博客">
<meta property="og:site_name" content="Akkuman">
<meta property="og:image" content="http://127.0.0.1:8000/images/avatar.png">
<meta property="og:type" content="website">
<meta name="robots" content="noodp">

<meta itemprop="name" content="Akkuman">
<meta itemprop="description" content="Akkuman的技术博客">
<meta itemprop="image" content="http://127.0.0.1:8000/images/avatar.png">

<link rel="canonical" href="http://127.0.0.1:8000">

<link rel="shortcut icon" href="/favicon.png">
<link rel="apple-itouch-icon" href="/favicon.png">

<link type="text/css" rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css">
<link type="text/css" rel="stylesheet" href="/bundle/css/prism.css">
<link type="text/css" rel="stylesheet" href="/bundle/css/zoom.css">
<link type="text/css" rel="stylesheet" href="/bundle/css/main.css">
<script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>



<script>var cPlayers = [];var cPlayerOptions = [];</script>


<script type="text/javascript">
    var timeSinceLang = {
        year: '年前',
        month: '个月前',
        day: '天前',
        hour: '小时前',
        minute: '分钟前',
        second: '秒前'
    };
    var root = '';
</script>


        <meta name="keywords" content="life,Hacker,生活,">
        <meta name="description" content="基于Openwrt&#43;Shadowsocks&#43;ipv6实现校园网免流量无限时长上网">
        <meta name="author" content="Akkuman">
        <title>基于Openwrt&#43;Shadowsocks&#43;ipv6实现校园网免流量无限时长上网</title>
    </head>
    <body>
        
        <header id="header" class="clearfix">
  <div class="container-fluid">
      <div class="row">
          <div class="logo">
              <div class="header-logo">
                <script>
                  var getwbclass = function() {
                    var wbclass = ['b', 'w'];
                    return wbclass[Math.floor(Math.random()*wbclass.length)];
                  }
                  var sitetitle = "Akkuman";
                  for (i in sitetitle) {
                    document.write('<a href="/"><span class="' + getwbclass() + ' titlechar">' + sitetitle.charAt(i) + '</span></a>');
                  }          
                  
                </script>
                
                <a id="btn-menu" href="javascript:isMenu();">
                    <span class="b">·</span>
                </a>
                <a href="javascript:isMenu1();">
                    <span id="menu-1" class="bf">1</span>
                </a>
                <a href="javascript:isMenu2();">
                    <span id="menu-2" class="bf">2</span>
                </a>
                <a href="javascript:isMenu3();">
                    <span id="menu-3" class="bf">3</span>
                </a>
              </div>
              <div id="menu-page">
                <a href="/archive.html"><li>归档</li></a>
                <a href="/tag.html"><li>标签</li></a>
                
                <a href="/atom.xml"><li>订阅</li></a>
                
                <a href="about.html"><li>关于</li></a>
              </div>
              <div id="search-box">
                  <div id="search">
                      <input autocomplete="off" type="text" name="s" id="menu-search" placeholder="搜索..." data-root="" />
                  </div>
              </div>
          </div>
      </div>
  </div>
  </header>
        <div id="body" class="clearfix">
            <div class="container-fluid">
                <div class="row">
                    <div id="main" class="col-12 clearfix" role="main">
                        <article class="posti" itemscope itemtype="http://schema.org/BlogPosting">
                            <h1 class="post-title" itemprop="name headline">基于Openwrt&#43;Shadowsocks&#43;ipv6实现校园网免流量无限时长上网</h1>
                            <div class="post-meta">
                                <p>
                                    Written by <a itemprop="name" href="/about.me.html" rel="author">Akkuman</a> with ♥ on <time datetime="1474685162" itemprop="datePublished"></time> in <a href="/tag/life/index.html">life </a><a href="/tag/Hacker/index.html">Hacker </a><a href="/tag/%e7%94%9f%e6%b4%bb/index.html">生活 </a>
                                </p>
                            </div>
                            <div class="post-content" itemprop="articleBody">
                                <blockquote>
<p>转载自<a href="http://www.jianshu.com/p/4d44172f1a5b">Dyhube</a></p>
</blockquote>

<h1>简述</h1>

<p>笔者利用笔记本电脑实现ipv6免费上网已经有一段时间了，原理是通过ipv6访问ipv4资源，在学校网络不限流量、不限时长、20兆带宽（我们学校ipv6限速上下对等20兆，没办法！）,电脑开热点全寝室共用，那真是爽翻天 !</p>

<p><img src="" data-src="http://7xusrl.com1.z0.glb.clouddn.com/ipv6.png" alt="ipv6" /></p>

<p>但是每天回到寝室总是打开电脑开热点还真是蛋疼的事情。再说电脑也不能总是开着吧。这时我就想能不能找个路由器，一天二十四小时开机，电脑、手机、平板随时都可以连。这个想法大概出现在半年前，由于手里没有路由器，就一直没弄，但是网上是有各种成功的案例的。</p>

<p>前段时间手里终于进了台K1，由于之前已经查了相当多的教程，所以就顺风顺水，很快就成功了。下面我就主要讲一下openwrt客户端的配置问题。</p>

<h1>意义</h1>

<p>在大部分高校，ipv4一般是计流量或计时收费的，（笔者学校就是计时收费的，50元200小时网通十兆带宽）而且，由于校园的特殊性，相应的价格也比市面上宽带服务商要高。万幸的是，这些高校一般具有ipv6网络环境，并且由于国家的大力支持，普及范围广，而且不计算流量，聪明的人早就想能不能通过利用ipv6已达到免流量及无限时长上网？答案是可行的，鉴于目前公网的环境普遍是ipv4，我们可以找一台同时具有ipv4和ipv6地址的服务器，我们在校内通过ipv6访问服务器，然后服务器处理我们的访问请求以<code>ipv4/ipv6双栈</code>的方式代替我们访问互联网，再将数据通过ipv6反馈给我们，从而到达免流上网的目的。并且，考虑到大部分高校ipv6没有限制速度，理论上可以达到服务器出口的带宽，当然，具体取决于你们学校的ipv6出口带宽。</p>

<h1>为什么用Shadowsocks？</h1>

<p>配置简单，真的简单！以前看到过信息学院的学长写的一篇blog,原理是<code>ipv6 to ipv4</code> 从而ipv6 to ipv4网络,其实原理是一样的，只是他用了<code>openvpn</code>这个软件，但是感觉实现起来好难。像这样的开源支持ipv6协议的软件还是有很多的，这里就不再陈述。</p>

<p>回到原题为什么用Shadowsocks，配置简单。vps服务提供商<a href="https://bandwagonhost.com/">搬瓦工</a>现在为了迎合国人的需求现在已经预配了Shadowsocks,只需要点击以下安装就ok了。</p>

<p><img src="" data-src="http://7xusrl.com1.z0.glb.clouddn.com/877518-ab3dea8d36104b08.png" alt="1" /></p>

<p><img src="" data-src="http://7xusrl.com1.z0.glb.clouddn.com/877518-ab3dea8d36104b08.png" alt="2" /></p>

<h1>适用对象</h1>

<p>具有<code>ipv6地址</code>、<code>ipv4流量</code>（计时）收费贵爱折腾的大学生。不推荐打国服游戏，延迟你懂的，但对延迟没要求的游戏还是可以玩的，美服、亚服、台服随你玩。</p>

<h1>准备</h1>

<h2>openwrt固件路由器</h2>

<p>路由器的刷机请自行Google,教程一大堆，刷机时笔者也遇到过很多问题，坚持！如果你的也是K1路由器，也要刷机，不妨看这个<a href="http://akkuman.coding.me/2016/09/22/%E7%BB%99%E6%96%90%E8%AE%AFK1%E5%88%B7%E6%9C%BA%E5%B9%B6%E6%8B%A8%E5%8F%B7e%E4%BF%A1-%E6%B9%96%E5%8C%97%E5%9C%B0%E5%8C%BA%E6%B5%8B%E8%AF%95%E6%97%A0%E9%97%AE%E9%A2%98/">教程</a>。刷机的重点是刷<code>Shadowsocks插件</code>，我的K1直接刷的来自恩山网友的固件，固件里已经附带了Shadowsocks。<a href="http://pan.baidu.com/s/1dFJO4hF">openwrt</a>固件自取。openwrt控制面板上图。</p>

<p><img src="" data-src="http://7xusrl.com1.z0.glb.clouddn.com/877518-ed11845c67728119.png" alt="3" /></p>

<h2>Shadowsocks+ipv6节点信息</h2>

<p>因为笔者手里有台美国的vps，并且配置了Shadowsocks，所以现在拿来就直接用，老实说搭建的Shadowsocks平常很少用，之前觉得租这个vps很是浪费。但是自从寝室里有了这台全天候开机的路由器，值了！在这里我要强调一下，Shadowsocks的节点我们需要ipv6地址的，不然还是没法走校内的ipv6通道。</p>

<h1>前方高能预警</h1>

<h2>操作</h2>

<p>首先openwrt固件路由器登陆<code>192.168.1.1</code>，初始登录默认密码是：<code>admin</code>。登进去之后最好先不要对任何东西改动，按照正常路由器的配置对路由器进行拨号上网。然后选择<code>Shadowsocks插件</code>，选择<code>启动</code>。（为什么这样做呢？笔者尝试了几下，不拨号上网的话，<code>Shadowsocks</code>和<code>DNS</code>配置好了以后无法上网，最后总结，先拨号上网、再配置<code>Shadowsocks</code>和<code>DNS</code>信息）</p>

<p>步骤：点击 <code>openwrt服务</code>&gt;<code>Shadowsocks</code>，出现以下界面。</p>

<p><img src="" data-src="http://7xusrl.com1.z0.glb.clouddn.com/877518-8304c61781a62c95.png" alt="4" /></p>

<h2>Shadowsocks的配置</h2>

<pre><code>服务器ip：  
密码：  
服务器端口：  
加密方式：  
</code></pre>

<p>对Shadowsocks配置好了以后，点击下面的透明代理，选择<code>启动</code>。</p>

<p><img src="" data-src="http://7xusrl.com1.z0.glb.clouddn.com/877518-b2304b09473a3a76.png" alt="5" /></p>

<p>对Shadowsocks配置好以后，我们的任务还没有结束，最重要的就是配置<code>DNS信息</code>。这里如果不配置DNS，IP地址选择ipv4的，Shadowsocks是国外的，那么通过这种方式使用Shadowsocks就是通过路由器来翻fq，在这里我就不多说了。</p>

<h2>DNS的配置</h2>

<p>DNS设置有两种方案，一种是利用<code>ChinaDNS</code>，还有一种直接在<code>DHCP/DNS</code>设置页面（<code>网络&gt;DHCP/DNS</code>）进行填写。</p>

<p>由于本次折腾的特殊性，路由器工作在<code>纯ipv6环境</code>下，也就是说路由器没有ipv4的网络，但常用的DNS服务器大多是以ipv4地址方式提供的，如果使用ipv4的DNS服务器就会导致无法解析。此处用了<code>[2001:470:0:c0::2]</code>，但是很不幸，该DNS被污染了，无法解析如google，youtube一类网址，但是对国内的网站的解析很好。</p>

<pre><code>2001:470:0:c0::2
</code></pre>

<p><img src="" data-src="http://7xusrl.com1.z0.glb.clouddn.com/877518-a819f528346ea980.png" alt="6" /></p>

<p>其他的DNS最好选择Google的，相对的来说，网站解析最全面，而且还可以fq,只是一部分了，选择Google的公共DNS有一个缺点，就是像移动端的微信或者qq了，朋友圈的信息或公众号加载不出来，这是很蛋疼的事情。个人还是推荐上面的那条DNS,速度快、国内网站全面，几乎全覆盖。</p>

<p>下面是一些从网上找来的公共DNS，可以试验一下，说不定有什么以外的收获呢。</p>

<pre><code>ordns.he.net  2001:470:20::2     74.82.42.42

tserv1.fmt2.he.net  2001:470:0:45::2   72.52.104.74

tserv1.dal1.he.net  2001:470:0:78::2   216.218.224.42

tserv1.ams1.he.net  2001:470:0:7d::2   216.66.84.46

tserv1.mia1.he.net  2001:470:0:8c::2   209.51.161.58

tserv1.tor1.he.net  2001:470:0:c0::2   216.66.38.58

ns.ipv6.uni-leipzig.de  2001:638:902:1::10   139.18.25.34
</code></pre>

<h2>Google Public DNS</h2>

<pre><code>google-public-dns-a.google.com  2001:4860:4860::8888   8.8.8.8

google-public-dns-b.google.com  2001:4860:4860::8844   8.8.4.4
</code></pre>

<p>码字不容易，在这里非常感谢<a href="http://www.jianshu.com/p/6559d6e4e7ab">_Echo</a>和<a href="https://www.zhangzhe.info/2016/03/openwrt-shadowsocks-ipv6/">张哲</a>两人的post.</p>

<blockquote>
<p>转载自<a href="http://www.jianshu.com/p/4d44172f1a5b">Dyhube</a></p>
</blockquote>

                            </div>
                            <div style="display:block;" class="clearfix">
                                <section style="float:left;">
                                    <span itemprop="keywords" class="tags">
                                        tag(s): <a href="/tag/life/index.html">life </a><a href="/tag/Hacker/index.html">Hacker </a><a href="/tag/%e7%94%9f%e6%b4%bb/index.html">生活 </a>
                                    </span>
                                </section>
                                <section style="float:right;">
                                    <span><a id="btn-comments" href="javascript:isComments();">show comments</a></span> · <span><a href="javascript:goBack();">back</a></span> · 
                                    <span><a href="/">home</a></span>
                                </section>
                            </div>
                            



<div id="comments" class="gen">
    <script>
        document.write('<section id="disqus_thread"></section>');
        var site_comment_load = function disqus() {
            var d = document, s = d.createElement('script');
            s.src = '//Akkum4n.disqus.com/embed.js';
            s.setAttribute('data-timestamp', +new Date());
            (d.head || d.body).appendChild(s);
        }
    </script>
</div>

                        </article>
                    </div>
                </div>
            </div>
        </div>
        <footer id="footer" role="contentinfo">
    <div class="container-fluid">
        <div class="row">
        <div class="col-12">
            &copy; 
            <script type="text/javascript">
                document.write(new Date().getFullYear());
            </script>
            <a href="/">Akkuman</a>.
            Using <a target="_blank" href="http://www.chole.io/">Ink</a> & <a target="_blank" href="/">Story</a>.
        </div>
        </div>
    </div>
</footer>

<script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script src="/bundle/js/prism.js"></script>
<script src="/bundle/js/zoom-vanilla.min.js"></script>
<script src="/bundle/js/main.js"></script>

<script>
    window.onload=function(){
        if (window.location.hash!='') {
          var i=window.location.hash.indexOf('#comment');
          var ii=window.location.hash.indexOf('#respond-post');
          if (i != '-1' || ii != '-1') {
            document.getElementById('btn-comments').innerText='hide comments';
            document.getElementById('comments').style.display='block';
          }
        }
    }

    function isMenu(){
        if(document.getElementById('menu-1').style.display=='inline'||document.getElementById('menu-1').style.display=='block'){
            $('#search-box').fadeOut(200);
            $('#menu-page').fadeOut(200);
            $('#menu-1').fadeOut(500);
            $('#menu-2').fadeOut(400);
            $('#menu-3').fadeOut(300);
        } else {
            $('#menu-1').fadeIn(150);
            $('#menu-2').fadeIn(150);
            $('#menu-3').fadeIn(150);
        }
    }

    function isMenu1(){
        if(document.getElementById('menu-page').style.display=='block'){
            $('#menu-page').fadeOut(300);
        } else {
            $('#menu-page').fadeIn(300);
        }
    }

    function isMenu2(){
        if(document.getElementById('torTree')){
            if(document.getElementById('torTree').style.display=='block'){
                $('#torTree').fadeOut(300);
            } else {
                $('#torTree').fadeIn(300);
            }
        }
    }

    function isMenu3(){
        if(document.getElementById('search-box').style.display=='block'){
            $('#search-box').fadeOut(300);
        } else {
            $('#search-box').fadeIn(300);
        }
    }

    function isComments(){
        if(document.getElementById('btn-comments').innerText=='show comments'){
            document.getElementById('btn-comments').innerText='hide comments';
            document.getElementById('comments').style.display='block';
            site_comment_load();
        } else {
            document.getElementById('btn-comments').innerText='show comments';
            document.getElementById('comments').style.display='none';
        }
    }

    function Search404(){
        $('#menu-1').fadeIn(150);
        $('#menu-2').fadeIn(150);
        $('#menu-3').fadeIn(150);
        $('#search-box').fadeIn(300);
    }

    function goBack(){
        window.history.back();
    }
</script>


<script async>
"use strict";
(function(){
var cp = function(){
    var len = cPlayerOptions.length;
    for(var i=0;i<len;i++){
        var element = document.getElementById('player' + cPlayerOptions[i]['id'])
        while (element.hasChildNodes()) {
            element.removeChild(element.firstChild);
        };
        cPlayers[i] = new cPlayer({
            element: element,
            list: cPlayerOptions[i]['list'],
            });
    };
    cPlayers = [];cPlayerOptions = [];
};
var script = document.createElement('script');
script.type = "text/javascript";
script.src = "https://cdn.bootcss.com/cplayer/3.2.1/cplayer.js";
script.async = true;
if(script.readyState){  
    script.onreadystatechange = function(){
        if (script.readyState == "loaded" ||
            script.readyState == "complete"){
            script.onreadystatechange = null;
            cp();
        }
    };
}else{  
    script.onload = function(){
        cp();
    };
}
document.head.appendChild(script);
})();
</script>

    </body>
</html>
